结构体和指针,内存分配问题


struct Stack
{
    int arr[max];
    int val;
    int top;
}
struct Stack *p;

在main函数外定义了结构体类型变量,此时系统为该变量成员分配内存了吗,若此时再定义一个指向该类型的指针,需不需要为指针开辟一个空间

struct Stack sta;
这样分配了

struct Stack *p;
这个没有

struct Stack *p = &sta; 这样就可以了

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/1057364
  • 这篇博客也不错, 你可以看下函数声明应该写在什么位置?main函数里面还是前面?(都可以,只要在调用语句的前面即可)
  • 除此之外, 这篇博客: 单独写一个函数,用来求字符串的长度。在main函数中输入字符串,调用这个函数并输出他的长度。中的 题目: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    单独写一个函数,用来求字符串的长度。在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;
    }
    
  • 您还可以看一下 唐宇迪老师的深度学习项目实战-关键点定位视频课程课程中的 深度学习项目实战01 人脸关键点检测算法框架小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    回答:

    1. 在main函数外定义一个结构体类型变量时,系统并没有为该变量的成员分配内存,只是为这个变量类型定义了一些基本属性,如成员变量和成员函数等。需要使用该变量时,才会根据需要为其成员分配内存。

    2. 如果再定义一个指向该类型的指针,需要为指针开辟空间。指针本身需要占用内存空间,并且需要指向一个有效的内存地址,才能访问到具体的数据。可以使用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;
    }
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^