struct Stack
{
int arr[max];
int val;
int top;
}
struct Stack *p;
在main函数外定义了结构体类型变量,此时系统为该变量成员分配内存了吗,若此时再定义一个指向该类型的指针,需不需要为指针开辟一个空间
struct Stack sta;
这样分配了
struct Stack *p;
这个没有
struct Stack *p = &sta; 这样就可以了
不知道你这个问题是否已经解决, 如果还没有解决的话:单独写一个函数,用来求字符串的长度。在main函数中输入字符串,调用这个函数并输出他的长度。
#include <stdio.h>
int length(char *str);
int main()
{
int len;
char str[1000]; //定义一个字符串
scanf("%s",str);
len = length(str); //调用计算字符串长度的函数
printf("%d\n",len);
return 0;
}
int length(char *str) //计算字符串长度
{
int count = 0;
while(*str != '\0')
{
count++; //计数
str++; //移动指针
}
return count;
}
回答:
在main函数外定义一个结构体类型变量时,系统并没有为该变量的成员分配内存,只是为这个变量类型定义了一些基本属性,如成员变量和成员函数等。需要使用该变量时,才会根据需要为其成员分配内存。
如果再定义一个指向该类型的指针,需要为指针开辟空间。指针本身需要占用内存空间,并且需要指向一个有效的内存地址,才能访问到具体的数据。可以使用malloc等函数为指针动态分配内存空间。
示例代码:
struct Person {
char name[20];
int age;
};
int main() {
struct Person person; // 定义结构体类型变量
struct Person* ptr = NULL; // 定义指向该类型的指针,初始值为空
ptr = (struct Person*)malloc(sizeof(struct Person)); // 为指针动态分配空间
// 使用指针访问结构体成员
strcpy(ptr->name, "John");
ptr->age = 30;
// 释放动态分配的内存空间
free(ptr);
return 0;
}