指针对于数组和字符串来说 是其内存的首地址。
- 首先发现字符型和整形的有点不一样呢
#define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <string.h> #include <stdio.h> #define DER 100 char * getStr1() { char *p1 = "abcdefg2"; return p1; } char *getStr2() { char *p2 = "abcdefg2"; return p2; } void main() { char *p1 = NULL; char *p2 = NULL; int *b1; int *b2; int a=100; b1=&a; b2=&a; p1 = getStr1(); p2 = getStr2(); //打印p1 p2 所指向内存空间的数据 printf("p1:%s , p2:%s ", p1, p2);//直接显示的是指针内部的值 //打印p1 p2 的值 printf("p1:%d , p2:%d ", p1, p2);//这里显示的是两个指针指向值地址 printf("b1:%d ,b2:%d ", b1, b2);//这里显示的是指针指向值的地址 printf("b1:%d ,b2:%d ", &b1, &b2);//整个数据的地址,如100,12个字节 printf("b1:%d ,b2:%d ", *b1, *b2);//指针内存放的值 printf("b1:%s ,b2:%s ", b1, b2);//两个指针所代表的ascii表中的值 printf("hello... "); system("pause"); return ; }
结果为
-
:
#include "stdlib.h" #include "stdio.h" #include "string.h" // 数据类型的用途 //数据类型的本质:固定大小内存块的别名 // b &b 数组数据类型 (定义一个1 数组类型 2数组指针 3 数组类型和数组指针类型的关系) ====>压死初学者的三座大山 抛砖 // void main31() { int a; //告诉c编译器分配4个字节的内存 int b[10] ; //告诉c编译器分配40个自己内存 printf("b:%d, b+1:%d, &b:%d, &b+1:%d ", b, b+1, &b, &b+1); printf("sizeof(b):%d ", sizeof(b)); //40 printf("sizeof(a):%d ", sizeof(a)); //4 // b+1 &b+1 结果不一样 //b &b所代表的数据类型不一样 //b 代表的数组首元素的地址 //&b代表的是整个数组的地址 // printf("hello.... "); system("pause"); } struct Teacher { char name[64]; int age; }Teacher; typedef struct Teacher2 { char name[64]; int age; }Teacher2; //数据别名 typedef typedef int u32; void main33() { int a; //告诉c编译器分配4个字节的内存 int b[10] ; //告诉c编译器分配40个自己内存 struct Teacher t1; Teacher2 t2; t1.age = 31; printf("u32:%d ", sizeof(u32)); { char *p2 = NULL; void *p1 = NULL; p2 = (char *)malloc(100); p1 = &p2; } { //void a;//编译器不知道如何分配内存 } printf("hello.... "); system("pause"); }