c函数与void参数

时间:2017-02-21 23:57:10

标签: c pointers

函数func采用void参数buf。我想通过调用buf将1到10之间的值插入func。但是,buffunc的{​​{1}}地址不同,打印值不是1到10.任何人都可以帮我解决这个问题吗?谢谢!

main

2 个答案:

答案 0 :(得分:2)

startEdit() cd('/') mod = 'loopback' module = cmo.createJMSSystemResource(mod) module.setTargets(cmo.getClusters()) server = module.createForeignServer('loopback_server') server.setDefaultTargetingEnabled(true) server.setInitialContextFactory('weblogic.jndi.WLInitialContextFactory') # When we don't populate connection parameters (URLs, user, password), # WebLogic defaults to connecting to the current cluster, which is exactly what we need! topicLink = server.createForeignDestination('A_to_B') topicLink.setLocalJNDIName('jms/B/topic') topicLink.setRemoteJNDIName('jms/A/topic') cfLink = server.createForeignConnectionFactory('A_to_B_cf') cfLink.setLocalJNDIName('jms/B/connectionfactory') cfLink.setRemoteJNDIName('jms/A/connectionfactory') activate() 设置为指向堆栈内存的指针(即buf)。由于一旦程序离开my_array它就不再有效,这不起作用。

要么使用动态内存,要么需要明确释放它。另一种选择是在外部创建内存,只在func内填充:

func

除此之外:永远不要使用#include <stdio.h> void func(char* buf, int n) { for(int i = 0; i < n; i++) { buf[i]=i; } } int main() { char buf[10]; func(buf, sizeof(buf)); for(int i=0; i < sizeof(buf); i++) { printf("%d\n", buf[i]); } } ,除非你有充分的理由!

答案 1 :(得分:0)

你需要在你的函数之外分配你的内存,否则它在你返回时将无效,因为它是在堆栈上分配的。

void func(int n, int *buf);

int main()
{
    const int n = 10;
    int my_array[n];

    func(n, my_array);
    for(int i = 0; i < n; i++){
        printf("%d\n", ((int*)my_array)[i]);
    }
    printf("in main, after func: %p\n", my_array);
}

void func(int n, int *buf)
{
    for(int i = 0; i < n; i++){
        buf[i] = i;
    }
}